package com.qf.data.service;

import cn.hutool.core.util.ObjectUtil;
import com.qf.common.constant.CacheConstant;
import com.qf.common.model.DeviceModelValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.stereotype.Service;

import javax.xml.ws.ServiceMode;
import java.util.Date;

/**
 * @author 千锋健哥
 */
@Service
public class DeviceModelValueServiceImpl implements DeviceModelValueService{

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public void saveModelValueToMongo(DeviceModelValue deviceModelValue) {
        //1. 判断数据不为空, 如果为空直接返回
        if (ObjectUtil.isNull(deviceModelValue)) {
            return;
        }
        //2. 添加数据的创建时间
        deviceModelValue.setCreateTime(new Date());

        //3. 创建mongodb集合, device_value_产品key
        String collectionName = CacheConstant.Entity.DEVICE + CacheConstant.Suffix.VALUE + "_"
                + deviceModelValue.getProduct_key();

        //4. 给集合创建索引
        deviceValueIndex(collectionName);
        //5. 保存到mongodb
        mongoTemplate.insert(deviceModelValue, collectionName);
    }

    /**
     * 创建传感器数据在mongodb中的索引
     */
    private void deviceValueIndex(String collectionName) {
        Index deviceIndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        deviceIndex.background().on("device", Sort.Direction.DESC).named("device_Index");
        mongoTemplate.indexOps(collectionName).ensureIndex(deviceIndex);

        Index tenantIdIndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        tenantIdIndex.background().on("tenant_id", Sort.Direction.DESC).named("tenantID_Index");
        mongoTemplate.indexOps(collectionName).ensureIndex(tenantIdIndex);

        Index productKeyndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        productKeyndex.background().on("product_key", Sort.Direction.DESC).named("productKey_Index");
        mongoTemplate.indexOps(collectionName).ensureIndex(productKeyndex);

        Index createTimeIndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        createTimeIndex.background().on("createTime", Sort.Direction.DESC).named("createTime_Index");
        mongoTemplate.indexOps(collectionName).ensureIndex(createTimeIndex);
    }
}
